package com.zhuzhiguang;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.nio.channels.ReadableByteChannel;
import java.util.ArrayList;
import java.util.List;


public class StreamUtil {

	/**
	 * 功能：批量关闭流。
	 *
	 * @param AutoCloseable... closeables 多个可关闭的对象
	 */
	public static void closings(AutoCloseable... closeables) {
		// TODO 实现代码
		try {
			for (int i = 0; i < closeables.length; i++) {
				closeables[i].close();
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	/**
	* 功能：流处理，默认不关闭流
	*
	* @param InputStream inputStream 输入流
	* @param OutputStream outputStream 输出流
	*/
	public static void copy(InputStream inputStream, OutputStream outputStream) throws IOException {
		//TODO 实现代码
		
		byte b[] = new byte[1024];
		while(inputStream.read(b)>0) {
			outputStream.write(b);
		}
		
	}
	
	/**
	* 功能：读取文本流，也可以将流转成字符串，默认编码为UTF-8
	*
	* @param InputStream inputStream 输入流
	* @param boolean isClose 读完后是否关闭流
	*
	* @return 字符串
	*/
	public static String asString(InputStream src, boolean isClose) throws IOException {
		//TODO 实现代码
		
		StringBuilder sb = new StringBuilder();
		
		byte[] b = new byte[1024];
		int len;
		try {
			while((len =src.read(b))!=-1) {
			//return  new String(b, 0, len);
				sb.append(new String(b));
			}
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			//关闭流
			if(isClose)
				closings(src);
		}
		
		return sb.toString();
		
	}
	
	/**
	* 功能：读取文本流，也可以将流转成字符串
	*
	* @param InputStream inputStream 输入流
	* @param String encoding 指定编码
	* @param boolean isClose 读完后是否关闭流
	*
	* @return 字符串
	*/
	public static String asString(InputStream src, String encode, boolean isClose) throws IOException {
		//TODO 实现代码
		
				StringBuilder sb = new StringBuilder();
				
				byte[] b = new byte[1024];
				int len;
				try {
					while((len =src.read(b))!=-1) {
					//return  new String(b, 0, len);
						sb.append(new String(b,encode));
					}
				} catch (IOException e) {
					e.printStackTrace();
				} finally {
					//关闭流
					if(isClose)
						closings(src);
				}
				
				return sb.toString();
				
	}

	
	/**
	* 功能：写文本流，默认为UTF-8编码
	*
	* @param String content 要写入的内容
	* @param OutputStream outputStream 输出流
	* @param boolean isClose 读完后是否关闭流
	*
	*/
	public static void writingString(String content, OutputStream outputStream, boolean isClose) throws IOException {
		//TODO 实现代码
		writingString(content,outputStream,"utf-8",isClose);
	}

	/**
	* 功能：写文本流，默认为UTF-8编码
	*
	* @param String content 要写入的内容
	* @param OutputStream outputStream 输出流
	* @param String encode 指定编码
	* @param boolean isClose 读完后是否关闭流
	*/
	public static void writingString(String content, OutputStream outputStream, String encode, boolean isClose) throws IOException {
		//TODO 实现代码
		byte[] bytes = content.getBytes(encode);
		outputStream.write(bytes);
		if(isClose)
			closings(outputStream);	
	}
	
	/**
	* 功能：按行读取文本文件，返回一个List集合，默认编码为UTF-8，默认关闭流
	*
	* @param File textFile 文本文件
	* @param String encode 指定编码
	* @param boolean isClose 处理完成后是否关闭流
	*
	* @return 字符串集合
	*/
	public static List<String> readingLineFormTextFile(File textFile) throws IOException{
		return readingLineFormTextFile(textFile,"utf-8");
		
	}

	/**
	* 功能：按行读取文本文件，返回一个List集合，默认编码为UTF-8
	*
	* @param File textFile 文本文件
	* @param String encode 指定编码
	*
	* @return 字符串集合
	*/
	public static List<String> readingLineFormTextFile(File textFile, String encode) throws IOException{
		//TODO 实现代码
		//TODO 实现代码
		
				List<String> list = new ArrayList<String>();
				
				BufferedReader br = new BufferedReader(new FileReader(textFile));
				String line="";
				while((line = br.readLine() )!= null) {
					list.add(line);
				}
				return list;
	}

}
